<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>69_函数this</title>
		<script>
			/* 
			this
			-函数在执行时，JS解析器每次都会传递进一个隐含的参数;
			-这个参数就叫做 this;
			-this会指向一个对象;
				-this所指向的对象会根据函数调用方式的不同而不同
					1.以函数形式调用时，this指向的是window
					2.以方法的形式调用时，this指向的是调用方法的对象
				-通过this可以在方法中引用调用方法的对象
			 */

			function fn() {
				console.log("fn打印", this); //打印winddown对象
			}
			const obj = {
				name: "孙悟空"
			}
			obj.test = fn; //给obj添加一个test属性，并把函数fn赋值给test。

			const obj2 = {
				name: "猪八戒",
				test: fn
			}

			fn(); //以函数形式调用,实际就是调用window对象的方法。window.fn();
			obj.test(); //此时fn打印的this就是obj=>fn打印 {name: '孙悟空', test: ƒn}
			obj2.test();

			const obj3 = {
				name: "沙和尚",
				sayHello: function() {
					console.log("obj3=", this.name);
				}
			}
			const obj4 = {
				name: "唐僧",
				sayHello: function() {
					console.log("obj4=", this.name);
				}
			}
			//为两个对象添加一个方法，可以打印自己的名字
			obj3.sayHello();
			obj4.sayHello();
		</script>
	</head>
	<body>
	</body>
</html>